package common;

import java.util.List;
import java.util.Map;

import org.apache.struts.action.ActionForm;

/**
 * テストファイル読み込み操作クラス。<BR>
 * 
 * @author SEH119
 */
public abstract class AbstractTestDataFileReader {

    public static final String DB_DATA             = "_DB_DATA";
    public static final String VERIFY_DB_DATA      = "_VERIFY_DB_DATA.xls";
    public static final String VERIFY_STRUTS       = "_VERIFY_STRUTS.xls";
    public static final String BEFORE_SESSION_INFO = "before_session_info";
    public static final String AFTER_SESSION_INFO  = "after_session_info";
    public static final String REQUEST_INFO        = "request_info";
    public static final String STRUTS_INFO         = "struts_info";

    private String fileName;

    private String methodName;

    private Class<?> cls;

    public AbstractTestDataFileReader(String fileName, String methodName, Class<?> cls) {
        this.fileName = fileName;
        this.methodName = methodName;
        this.cls = cls;
    }
    /**
     * テストケースのデータ準備SQLを取得する。<BR>
     * fileName + DB_DATAファイルから実行すべきSQLを取得する。<BR>
     * 
     * @return SQLを返します
     */
    public abstract List<String> getSqls();

    /**
     * 検証するSQLを取得する。<BR>
     * fileName + VERIFY_DB_DATAファイルから検証SQLを取得する。<BR>
     * 
     * @param sheetName 
     * @return 検証するSQLを戻ります
     */
    public abstract String getQuerySql(String sheetName);

    /**
     * SQL実行結果の期待値を取得する。<BR>
     * fileName + VERIFY_DB_DATAファイルから検証SQL実行結果の期待値を取得する。<BR>
     * 
     * @param sheetName
     * @return SQL実行結果の期待値
     */
    public abstract Result getResult(String sheetName);

    /**
     * actionを実行する前のSession情報を取得する。<BR>
     * 取得したSession情報をSessionに設定する。<BR>
     * 
     * @return Session情報
     */
    public abstract Map<String, Object> getBeforeSession();

    /**
     * actionを実行する後、期待Session情報を取得する。<BR>
     * Session情報を検証するため。<BR>
     * 
     * @return Session情報
     */
    public abstract Map<String, Object> getAfterSession();

    /**
     * requset情報を取得する。<BR>
     * action実行する前、設定するため。<BR>
     * 
     * @return requset情報
     */
    public abstract RequestInfo getRequestInfo();

    /**
     * 期待するStruts action情報を取得する。<BR>
     * Struts情報を検証するため。<BR>
     * 
     * @return Struts action情報
     */
    public abstract StrutsInfo getStrutsInfo();

    /**
     * 期待するAactionForm情報を取得する。<BR>
     * 
     * @return form情報
     */
    public abstract ActionForm getActionForm();

    public String getFileName() {
        return fileName;
    }

    public void setFileName(String fileName) {
        this.fileName = fileName;
    }

    public String getMethodName() {
        return methodName;
    }

    public void setMethodName(String methodName) {
        this.methodName = methodName;
    }

    public Class<?> getCls() {
        return cls;
    }

    public void setCls(Class<?> cls) {
        this.cls = cls;
    }

}
